library(tidyverse)
library(here)
library(dplyr)
library(tidyquery)
library(plotly)
theme_set(theme_gray())
# SEMPRE read_csv NUNCA read.csv
alunos = read_csv(
    here("Dados-UFCG-jul2021/alunos.csv"),
        col_types = cols(
        
      
    ),
)
## Warning: 567184 parsing failures.
##  row        col expected                  actual                                                           file
## 2589 APV_NOTA_1 a double COMUNICACAO E EXPRESSAO 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_2 a double LINGUA ESTRANGEIRA      'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_3 a double HISTORIA                'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_4 a double GEOGRAFIA               'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_5 a double MATEMATICA              'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/alunos.csv'
## .... .......... ........ ....................... ..............................................................
## See problems(...) for more details.
#ALU_ANO_INGRESSO
# Filtrando alunos n evadidos
# Filtrando alunos evadidos de 2019 a 2019
alunos = alunos %>% filter(ALU_ANO_EVASA > 2008, ALU_ANO_EVASA < 2020, ALU_CCU_CUR_COD_CURSO==14102100, !is.na(ALU_ANO_EVASA))
options(repr.plot.width = 14, repr.plot.height = 7)
p1 <- alunos %>%
  group_by(ALU_FORMA_EVASAO) %>%
  summarise(
    contagem = n()) %>%

  ggplot(aes(x = reorder(ALU_FORMA_EVASAO,(-contagem)), y=contagem,label=contagem,fill=as.factor(ALU_FORMA_EVASAO))) +
  geom_bar(stat="identity",width = 0.9,alpha=0.5) +
  geom_text(size= 3.5, vjust = -0.3) +
  labs(
    x="Código de evasão",
    y="Quantidade"
  ) +
  scale_fill_discrete(name="Forma de evasão",
                  breaks=c("0","1", "2", "3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","50"),
                  labels=c("Aluno regularmente matriculado", "Graduado", "Transferência para outra Instituição de Ensino Superior","Falecimento","Abandono de curso","Cancelamento de matrícula","Cancelamento para mudança de curso","Cancelamento por decisão judicial","Cancelamento por solicitação do aluno","Suspensão temporária","Curso concluído - não colou grau","Cancelamento por não cumprimento da PEC","Reentrada no curso (novo vestibular)","Cumprimento convênio","Novo regimento","Não comparecimento a cadastro", "Remanejado de curso","Não compareceu ao remanejamento","Não compareceu à matrícula - Alunos ingressantes","Término de intercâmbio","Graduando por decisão judicial","Matrícula cancelada por reprovação por falta","Matrícula cancelada por reprovações na mesma disciplina","Matrícula suspensa - Débito na biblioteca","Aguardando cadastramento
"))

ggsave("fig.png",p1,width = 14,
  height = 7)
p1

#Filtrando os alunos de interesse:
# 22 - Mátricula cancelada por reprovações na mesma disciplina
# 4 - Abandono de curso
# 21 - Mátricula cancelada por reprovação por falta
# 8 - Cancelamento por solicitação do aluno

alunos = alunos %>% filter(ALU_FORMA_EVASAO == 22 | ALU_FORMA_EVASAO == 4| ALU_FORMA_EVASAO == 21 | ALU_FORMA_EVASAO == 8)
# SEMPRE read_csv NUNCA read.csv
historico = read_csv(
    here("Dados-UFCG-jul2021/historico.csv"),
    col_types = cols(
        
        MAT_TUR_PERIODO = col_character(),
        MAT_TUR_ANO = col_character()
      
    )
    
    
)
## Warning: 5572026 parsing failures.
## row col  expected    actual                                                              file
##   1  -- 8 columns 9 columns 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/historico.csv'
##   2  -- 8 columns 9 columns 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/historico.csv'
##   3  -- 8 columns 9 columns 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/historico.csv'
##   5  -- 8 columns 9 columns 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/historico.csv'
##   6  -- 8 columns 9 columns 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/historico.csv'
## ... ... ......... ......... .................................................................
## See problems(...) for more details.
historico
## # A tibble: 4,525,499 x 8
##    MAT_TUR_ANO MAT_TUR_PERIODO MAT_TUR_DIS_DISCI~ MAT_TUR_TURMA MAT_ALU_MATRICU~
##    <chr>       <chr>                        <dbl> <lgl>                    <dbl>
##  1 1981        2                          1109005 NA                   180130145
##  2 1982        1                          1303012 NA                   180130145
##  3 1982        1                          1305015 NA                   180130145
##  4 1982        1                          1305075 NA                   180130145
##  5 1982        1                          1301003 NA                   180130145
##  6 1982        1                          1114031 NA                   180130145
##  7 1982        2                          1305052 NA                   180130145
##  8 1982        2                          1301004 NA                   180130145
##  9 1982        2                          1301022 NA                   180130145
## 10 1982        2                          1301024 NA                   180130145
## # ... with 4,525,489 more rows, and 3 more variables: MAT_TIPO_MATRICULA <dbl>,
## #   MAT_SITUACAO <dbl>, MAT_MEDIA_FINAL <dbl>

Removendo disciplinas ainda em curso

historico = historico %>% filter(MAT_SITUACAO != 1)
alunos
## # A tibble: 893 x 34
##    ALU_MATRICULA ALU_CCU_CUR_COD_CURSO ALU_CCU_COD_CURRICULO ALU_FORMA_INGRESSO
##            <dbl>                 <dbl>                 <dbl>              <dbl>
##  1     103210022              14102100                  1999                  1
##  2     103210012              14102100                  1999                  1
##  3     102210027              14102100                  1999                  1
##  4     104210021              14102100                  1999                  1
##  5     104210029              14102100                  1999                  1
##  6     105210137              14102100                  1999                  1
##  7     105210152              14102100                  1999                  1
##  8     106110120              14102100                  1999                  1
##  9     106210150              14102100                  1999                  1
## 10     106210154              14102100                  1999                  1
## # ... with 883 more rows, and 30 more variables: ALU_ANO_INGRESSO <dbl>,
## #   ALU_PERIODO_INGRESSO <dbl>, ALU_FORMA_EVASAO <dbl>, ALU_ANO_EVASA <dbl>,
## #   ALU_PERIODO_EVASAO <dbl>, ALU_TIPO_RESERVA_VAGAS <lgl>, ALU_CPF <chr>,
## #   ALU_SEXO <dbl>, ALU_ANO_NASCIMENTO <dbl>, ALU_COR_CODIGO <dbl>,
## #   ALU_NAT_MUN_CODIGO <dbl>, ALU_ANO_CONC_ENSINO_MEDIO <lgl>,
## #   ALU_TIPO_ENSINO_MEDIO <lgl>, APV_MEDIA_GERAL <dbl>, APV_DISC_1 <chr>,
## #   APV_NOTA_1 <dbl>, APV_DISC_2 <chr>, APV_NOTA_2 <dbl>, APV_DISC_3 <chr>,
## #   APV_NOTA_3 <dbl>, APV_DISC_4 <chr>, APV_NOTA_4 <dbl>, APV_DISC_5 <chr>,
## #   APV_NOTA_5 <dbl>, APV_DISC_6 <chr>, APV_NOTA_6 <dbl>, APV_DISC_7 <chr>,
## #   APV_NOTA_7 <dbl>, APV_DISC_8 <chr>, APV_NOTA_8 <dbl>
# SEMPRE read_csv NUNCA read.csv
disciplinas = read_csv(
    here("Dados-UFCG-jul2021/disciplinas-geral.csv")
)
## 
## -- Column specification --------------------------------------------------------
## cols(
##   DIS_DISCIPLINA = col_double(),
##   DIS_DESCRICAO = col_character(),
##   DIS_QTD_CR = col_double(),
##   DIS_QTD_CH = col_double(),
##   DIS_SET_COD_SETOR = col_double(),
##   DIS_TDI_COD_TIPO = col_double()
## )
disciplinas
## # A tibble: 9,266 x 6
##    DIS_DISCIPLINA DIS_DESCRICAO           DIS_QTD_CR DIS_QTD_CH DIS_SET_COD_SET~
##             <dbl> <chr>                        <dbl>      <dbl>            <dbl>
##  1        1105001 "MATERIAIS DE CONSTRU\~          5         75         11050000
##  2        1105005 "HIGIENE INDUSTRIAL E ~          3         45         11050000
##  3        1105006 "OFICINA MEC\xc2NICA I"          2         30         11050000
##  4        1105007 "OFICINA MEC\xc2NICA I~          4         60         11050000
##  5        1105012 "ESTUDO DE TEMPOS E MO~          4         60         11050000
##  6        1105013 "PROG E CONTROLE DA PR~          4         60         11050000
##  7        1105014 "CONTROLE DE QUALIDADE"          4         60         11050000
##  8        1105019 "TECNOLOGIA MEC\xc2NIC~          4         60         11050000
##  9        1105024 "DESENHO DE M\xc1QUINA~          3         75         11050000
## 10        1105035 "METODOLOGIA VISUAL I"           4         60         11050000
## # ... with 9,256 more rows, and 1 more variable: DIS_TDI_COD_TIPO <dbl>
historico_cc <- query(
"SELECT a.ALU_MATRICULA, a.ALU_FORMA_EVASAO, a.ALU_TIPO_RESERVA_VAGAS, a.ALU_SEXO, a.ALU_ANO_NASCIMENTO, h.MAT_TUR_DIS_DISCIPLINA, h.MAT_SITUACAO,h.MAT_TIPO_MATRICULA, a.ALU_ANO_EVASA, h.MAT_TUR_ANO,h.MAT_TUR_PERIODO

  FROM alunos a LEFT JOIN historico h ON a.ALU_MATRICULA = h.MAT_ALU_MATRICULA;"
)

#Criar coluna SEMESTRE #Alunos com histórico estranho. #113210439 #113210072

historico_cc <- historico_cc %>% mutate(SEMESTRE = paste(MAT_TUR_ANO,MAT_TUR_PERIODO, sep="."))

Calcular semestres

semestres <- query(
"SELECT p.ALU_MATRICULA as matricula, COUNT(DISTINCT(SEMESTRE)) as n_semestres

  FROM historico_cc p
  GROUP BY p.ALU_MATRICULA"
)
result <- query(
"SELECT p.ALU_MATRICULA, p.ALU_FORMA_EVASAO,p.ALU_TIPO_RESERVA_VAGAS, p.ALU_SEXO, p.ALU_ANO_NASCIMENTO, p.MAT_TUR_DIS_DISCIPLINA, d.DIS_QTD_CR, d.DIS_DESCRICAO, p.ALU_ANO_EVASA, p.MAT_SITUACAO

  FROM historico_cc p LEFT JOIN disciplinas d ON p.MAT_TUR_DIS_DISCIPLINA = d.DIS_DISCIPLINA;"
)
alunos_ficha = query(
"SELECT r.ALU_MATRICULA as matricula, r.ALU_FORMA_EVASAO as forma_evasao, r.ALU_ANO_EVASA as ano_evasao, r.ALU_TIPO_RESERVA_VAGAS, r.ALU_SEXO as sexo, r.ALU_ANO_NASCIMENTO as ano_nascimento, SUM(r.DIS_QTD_CR) as creditos_acumulados
  FROM result r
  GROUP BY r.ALU_MATRICULA, r.ALU_FORMA_EVASAO, r.ALU_ANO_EVASA, r.ALU_TIPO_RESERVA_VAGAS,r.ALU_SEXO,r.ALU_ANO_NASCIMENTO
  ;"
)

#SELECIONA AS DISCIPLINAS APROVEITADAS, CONTAM SÓ AS APROVADAS(CÓDIGO 3), incluindo as dispensadas:

historico2 <- historico %>% filter(MAT_SITUACAO==3)

historico_cc2 <- query(
"SELECT a.ALU_MATRICULA, h.MAT_TUR_DIS_DISCIPLINA

  FROM alunos a LEFT JOIN historico2 h ON a.ALU_MATRICULA = h.MAT_ALU_MATRICULA;"
)

result2 <- query(
"SELECT p.ALU_MATRICULA, d.DIS_QTD_CR
  FROM historico_cc2 p LEFT JOIN disciplinas d ON p.MAT_TUR_DIS_DISCIPLINA = d.DIS_DISCIPLINA;"
)
alunos_aprovados = query(
"SELECT r.ALU_MATRICULA as matricula, SUM(r.DIS_QTD_CR) as creditos_aproveitados
  FROM result2 r
  GROUP BY r.ALU_MATRICULA;"
)

Verificar históricos especificos

result %>% filter(ALU_MATRICULA==112150436)
## # A tibble: 28 x 10
##    ALU_MATRICULA ALU_FORMA_EVASAO ALU_TIPO_RESERVA_V~ ALU_SEXO ALU_ANO_NASCIMEN~
##            <dbl>            <dbl> <lgl>                  <dbl>             <dbl>
##  1     112150436                8 NA                         1              1991
##  2     112150436                8 NA                         1              1991
##  3     112150436                8 NA                         1              1991
##  4     112150436                8 NA                         1              1991
##  5     112150436                8 NA                         1              1991
##  6     112150436                8 NA                         1              1991
##  7     112150436                8 NA                         1              1991
##  8     112150436                8 NA                         1              1991
##  9     112150436                8 NA                         1              1991
## 10     112150436                8 NA                         1              1991
## # ... with 18 more rows, and 5 more variables: MAT_TUR_DIS_DISCIPLINA <dbl>,
## #   DIS_QTD_CR <dbl>, DIS_DESCRICAO <chr>, ALU_ANO_EVASA <dbl>,
## #   MAT_SITUACAO <dbl>
# Calculando Taxa de sucesso

alunos_ficha = merge(alunos_ficha,alunos_aprovados)

alunos_ficha = alunos_ficha %>% mutate(taxa_sucesso= creditos_aproveitados / creditos_acumulados)

# Calculando Carga Média (Créditos por semestre)

alunos_ficha <- merge(alunos_ficha,semestres)

alunos_ficha <- alunos_ficha %>% mutate(carga_media = creditos_acumulados/ n_semestres)


# Adicionando idade do aluno no ano de evasão
alunos_ficha <- alunos_ficha %>% mutate(idade_evasao=ano_evasao - ano_nascimento) 

# Removendo alunos com histórico 
alunos_ficha <- alunos_ficha %>% filter(!is.na(taxa_sucesso))

Distribuição dos creditos acumulados entre alunos divididos por tipo de evasão

p2 <- alunos_ficha %>% ggplot(aes(x=creditos_acumulados,fill=as.factor(forma_evasao))) +
  facet_wrap(~forma_evasao,ncol=1) + 
  geom_histogram(binwidth = 10) +  scale_fill_discrete(name="Forma de evasão",
                  breaks=c("0","1", "2", "3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","50"),
                  labels=c("Aluno regularmente matriculado", "Graduado", "Transferência para outra Instituição de Ensino Superior","Falecimento","Abandono de curso","Cancelamento de matrícula","Cancelamento para mudança de curso","Cancelamento por decisão judicial","Cancelamento por solicitação do aluno","Suspensão temporária","Curso concluído - não colou grau","Cancelamento por não cumprimento da PEC","Reentrada no curso (novo vestibular)","Cumprimento convênio","Novo regimento","Não comparecimento a cadastro", "Remanejado de curso","Não compareceu ao remanejamento","Não compareceu à matrícula - Alunos ingressantes","Término de intercâmbio","Graduando por decisão judicial","Matrícula cancelada por reprovação por falta","Matrícula cancelada por reprovações na mesma disciplina","Matrícula suspensa - Débito na biblioteca","Aguardando cadastramento
"))
p2

ggsave("fig3.png",p2,width = 14,
  height = 7)

Separando os grupos

grupo_1 = alunos_ficha %>% filter(creditos_acumulados <= 40, creditos_aproveitados <= 24)
grupo_2 = anti_join(alunos_ficha,grupo_1)
## Joining, by = c("matricula", "forma_evasao", "ano_evasao", "ALU_TIPO_RESERVA_VAGAS", "sexo", "ano_nascimento", "creditos_acumulados", "creditos_aproveitados", "taxa_sucesso", "n_semestres", "carga_media", "idade_evasao")

Agrupamento com Kmeans (grupo 1)

set.seed(1)

#grupo_1_rotulado <- grupo_1[,-1]
#row.names(grupo_1_rotulado) <- grupo_1[,1]

grupo_1_numerical = grupo_1 %>% select("forma_evasao","ano_evasao","sexo","ano_nascimento","taxa_sucesso","idade_evasao","carga_media")

# Normalization
grupo_1_numerical_norm <- as.data.frame(scale(grupo_1_numerical))
# load required packages
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(NbClust)

# Elbow method
fviz_nbclust(grupo_1_numerical_norm, kmeans, method = "wss") +
  geom_vline(xintercept = 4, linetype = 2) + # add line for better visualisation
  labs(subtitle = "Elbow method") # add subtitle

grupo_1_kmeans <- kmeans(grupo_1_numerical_norm, centers=4)
#grupo_1$grupo <- as.character(grupo_1_kmeans$cluster)
# Dimension reduction using PCA
pca <- prcomp(grupo_1_numerical,  scale = TRUE)
# Coordinates of individuals
ind.coord <- as.data.frame(get_pca_ind(pca)$coord)
# Add clusters obtained using the K-means algorithm
ind.coord$cluster <- factor(grupo_1_kmeans$cluster)

ind.coord$matricula <- grupo_1$matricula
ind.coord$idade_evasao <- grupo_1$idade_evasao
ind.coord$carga_media <- grupo_1$carga_media
ind.coord$taxa_sucesso <- grupo_1$taxa_sucesso
ind.coord$forma_evasao <- grupo_1$forma_evasao
ind.coord$sexo <- grupo_1$sexo
ind.coord$ano_nascimento <- grupo_1$ano_nascimento




# Data inspection
head(ind.coord)
##        Dim.1      Dim.2      Dim.3      Dim.4       Dim.5      Dim.6
## 1 -0.8931281 -0.9811823 -0.2114541  1.0127862  2.04731825 -1.6095356
## 2 -2.2530168 -1.4086821 -0.8287783 -0.6509348  0.79271042 -0.2274447
## 3 -0.4225949 -1.3527823 -1.2754890 -0.9246125  1.12016504 -0.3352418
## 4 -2.7106222 -1.4226571 -0.7171007 -0.5825153  0.71084677 -0.2004954
## 5 -0.2810531 -1.3914175 -2.7287158  0.7844019 -0.06821866  0.1214720
## 6 -0.9674613 -1.4123800 -2.5611993  0.8870311 -0.19101414  0.1618959
##          Dim.7 cluster matricula idade_evasao carga_media taxa_sucesso
## 1 8.314646e-16       4 108110011           22          20          0.4
## 2 1.014897e-15       4 108210015           27          24          0.0
## 3 9.038745e-16       4 108210023           19          24          0.0
## 4 1.014897e-15       4 108210035           29          24          0.0
## 5 1.014897e-15       4 108210306           19          24          0.0
## 6 1.011427e-15       4 109110001           22          24          0.0
##   forma_evasao sexo ano_nascimento
## 1           21    1           1987
## 2           21    1           1982
## 3           21    1           1990
## 4           21    1           1980
## 5           21    2           1990
## 6           21    2           1987
# Percentage of variance explained by dimensions
eigenvalue <- round(get_eigenvalue(pca), 1)
variance.percent <- eigenvalue$variance.percent
head(eigenvalue)
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1        2.0             28.4                        28.4
## Dim.2        1.3             18.6                        46.9
## Dim.3        1.2             16.8                        63.7
## Dim.4        1.0             13.9                        77.6
## Dim.5        0.8             11.7                        89.3
## Dim.6        0.7             10.7                       100.0
library(ggpubr)
ggscatter(
  ind.coord, x = "Dim.1", y = "Dim.2", 
  color = "cluster", palette = "npg", ellipse = TRUE, ellipse.type = "convex", ggtheme = theme_bw(),
  xlab = paste0("Dim 1 (", variance.percent[1], "% )" ),
  ylab = paste0("Dim 2 (", variance.percent[2], "% )" )
) +
  stat_mean(aes(color = cluster), size = 4)

fig <- plot_ly(data = ind.coord,type="scatter",mode="markers", size=12,x = ~Dim.1, y = ~Dim.2, color = ~cluster, text = ~paste("Matrícula: ", matricula, '<br>Idade:', idade_evasao, '<br>Carga média:', carga_media,'<br>Taxa de sucesso:', taxa_sucesso,'<br>Sexo:', sexo, '<br>Forma de evasão:', forma_evasao,'<br>Ano de nascimento:', ano_nascimento))

fig

Agrupamento com Kmeans (grupo 2)

#grupo_2_rotulado <- grupo_2[,-1]
#row.names(grupo_2_rotulado) <- grupo_2[,1]

grupo_2_numerical = grupo_2 %>% select("forma_evasao","ano_evasao","sexo","ano_nascimento","taxa_sucesso","idade_evasao","carga_media")

# Normalization
grupo_2_numerical_norm <- as.data.frame(scale(grupo_2_numerical))
# Elbow method
fviz_nbclust(grupo_2_numerical_norm, kmeans, method = "wss") +
  geom_vline(xintercept = 4, linetype = 2) + # add line for better visualisation
  labs(subtitle = "Elbow method") # add subtitle

grupo_2_kmeans <- kmeans(grupo_2_numerical_norm, centers=4)
#grupo_1$grupo <- as.character(grupo_1_kmeans$cluster)
# Dimension reduction using PCA
pca <- prcomp(grupo_2_numerical,  scale = TRUE)
# Coordinates of individuals
ind.coord <- as.data.frame(get_pca_ind(pca)$coord)
# Add clusters obtained using the K-means algorithm
ind.coord$cluster <- factor(grupo_2_kmeans$cluster)

ind.coord$matricula <- grupo_2$matricula
ind.coord$idade_evasao <- grupo_2$idade_evasao
ind.coord$carga_media <- grupo_2$carga_media
ind.coord$taxa_sucesso <- grupo_2$taxa_sucesso
ind.coord$forma_evasao <- grupo_2$forma_evasao
ind.coord$sexo <- grupo_2$sexo
ind.coord$ano_nascimento <- grupo_2$ano_nascimento




# Data inspection
head(ind.coord)
##       Dim.1    Dim.2     Dim.3      Dim.4       Dim.5      Dim.6         Dim.7
## 1 -3.881407 2.457329 0.1107274  0.3526435  0.42193235 -0.3983729 -5.759076e-15
## 2 -2.359275 1.932901 0.5839414  0.6189247 -0.26301712 -0.9355820 -5.513578e-15
## 3 -1.923742 1.397887 0.4252887  0.6361039 -0.45451966 -0.9696216 -5.525796e-15
## 4 -1.985078 0.273729 2.4281457 -1.6991643  1.03474613 -0.6531487 -4.907769e-15
## 5 -1.205811 2.793208 0.8791316  0.4257806 -0.05452159  0.5842767 -5.356579e-15
## 6 -1.857364 2.273905 0.3319828  0.3627056 -0.08547713  0.1840967 -5.870047e-15
##   cluster matricula idade_evasao carga_media taxa_sucesso forma_evasao sexo
## 1       1 102210027           31    22.46154    0.4486301           21    1
## 2       4 103210008           26    19.25000    0.5324675           22    1
## 3       4 103210012           25    20.92308    0.5808824           22    1
## 4       3 103210022           25    19.90909    0.5296804            4    2
## 5       4 104210021           24    20.55556    0.1459459           21    1
## 6       4 104210029           26    22.45455    0.2955466           22    1
##   ano_nascimento
## 1           1978
## 2           1983
## 3           1985
## 4           1985
## 5           1985
## 6           1984
# Percentage of variance explained by dimensions
eigenvalue <- round(get_eigenvalue(pca), 1)
variance.percent <- eigenvalue$variance.percent
head(eigenvalue)
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1        2.1             29.5                        29.5
## Dim.2        1.5             21.2                        50.7
## Dim.3        1.1             15.7                        66.4
## Dim.4        1.0             13.9                        80.3
## Dim.5        0.8             12.1                        92.4
## Dim.6        0.5              7.6                       100.0
library(ggpubr)
ggscatter(
  ind.coord, x = "Dim.1", y = "Dim.2", 
  color = "cluster", palette = "npg", ellipse = TRUE, ellipse.type = "convex", ggtheme = theme_bw(),
  xlab = paste0("Dim 1 (", variance.percent[1], "% )" ),
  ylab = paste0("Dim 2 (", variance.percent[2], "% )" )
) +
  stat_mean(aes(color = cluster), size = 4)

fig <- plot_ly(data = ind.coord,type="scatter",mode="markers", size=12,x = ~Dim.1, y = ~Dim.2, color = ~cluster, text = ~paste("Matrícula: ", matricula, '<br>Idade:', idade_evasao, '<br>Carga média:', carga_media,'<br>Taxa de sucesso:', taxa_sucesso,'<br>Sexo:', sexo, '<br>Forma de evasão:', forma_evasao,'<br>Ano de nascimento:', ano_nascimento))

fig